﻿using Seg.Componente;
using Presentacion.Clases.Dto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Seg.Logica;
using Seg.Entidades;
using Presentacion.Clases;
using SSEG.UInterfaces;
using System.Web.Configuration;

namespace Presentacion.Controllers
{
    public class LoginController : Controller
    {
        //
        // GET: /Login/

        public ActionResult Index()
        {
            return View();
        }

        public JsonResult Autentifica(string Usuario, string Contra)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (Usuario != string.Empty && Contra != string.Empty)
                {
                    var usuarioWindow = new UIEncriptador().EncriptarCadena(Usuario);
                    var clave = new UIEncriptador().EncriptarCadena(Contra);
                    var prefijo = System.Web.Configuration.WebConfigurationManager.AppSettings["PrefijoSist"];
                    var obj = new Autentificar().Autentificacion(usuarioWindow, clave, prefijo);

                    if (obj != null)
                    {
                        if (obj.result != 0)
                        {
                            Session[Presentacion.Clases.Constante.Sesiones.Nombre] = obj.Nombre;
                            Session[Presentacion.Clases.Constante.Sesiones.Usuario] = new UIEncriptador().DesEncriptarCadena(obj.UsuarioLogin);
                            Session[Presentacion.Clases.Constante.Sesiones.CodigoUsuarioOficina] = obj.CodigoUsuarioOficina;
                            Session[Presentacion.Clases.Constante.Sesiones.CodigoOficina] = obj.CodigoOficina;
                            Session[Presentacion.Clases.Constante.Sesiones.Oficina] = obj.Oficina;
                            Session[Presentacion.Clases.Constante.Sesiones.CodigoPerfil] = obj.CodigoPerfil;
                            Session[Presentacion.Clases.Constante.Sesiones.Perfil] = obj.Perfil;
                            Session[Presentacion.Clases.Constante.Sesiones.CodigoPerdilUsuario] = obj.CodigoPerdilUsuario;
                            Session[Presentacion.Clases.Constante.Sesiones.IdLogAuditoria] = obj.CodigoPerdilUsuario;
                            Session[Presentacion.Clases.Constante.Sesiones.Correo] = obj.UsuarioCorreo;


                            string html = new Menu().CargarMenu(Convert.ToInt32(obj.CodigoPerfil),
                                                       Convert.ToString(WebConfigurationManager.AppSettings["PrefijoSist"]),
                                                       Convert.ToInt32(obj.CodigoUsuarioOficina),
                                                       Convert.ToInt32(obj.CodigoPerdilUsuario),
                                                        Convert.ToString(WebConfigurationManager.AppSettings["PaginaMain"]));
                            if (html.Contains("-999"))
                            {
                                resultado.result = 0;
                                resultado.message = "No se encontraron opciones asignadas al usuario.";
                            }
                            else
                            {
                                resultado.result = 1;
                                Session[Constante.Sesiones.MenuCargado] = html;
                            }
                        }
                        else
                        {
                            resultado.result = 0;
                            resultado.message = obj.message;
                        }
                    }
                    else
                    {
                        resultado.result = 0;
                        resultado.message = "*Login Incorrecto.";
                    }
                }
                else
                {
                    resultado.result = 0;
                    resultado.message = "*Usuario y Contrasenia son obligatorios.";
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }

        //public JsonResult Validar(Presentacion.Clases.Constante.DTOLogin entidad)
        //{
        //    Resultado resultado = new Resultado( );
        //    try {
        //        Usuario usu = new Usuario();
        //        usu.UsuarioWindow = new  UIEncriptador().EncriptarCadena(entidad.usu);
        //        usu.Clave = new  UIEncriptador().EncriptarCadena(entidad.contra);

        //        var usuario = new LoginLogica().validarLogin(usu);

        //        if (usuario != null)
        //        {
        //            UsuarioOficina oficina = new UsuarioOficina();
        //            oficina = new UsuarioOficinaLogica().obtenerUsuOficinaXUsuario(usuario.CodigoUsuario);

        //            if (oficina != null)
        //            {
        //                PerfilUsuarioOficina perfil = new PerfilUsuarioOficina();
        //                perfil = new PerfilUsuarioOficinaLogica().obtenerPerfilUsuarioOficinaXCod(oficina.CodigoUsuarioOficina);

        //                if (perfil != null)
        //                {
        //                    List<PerfilUsuarioOficinaDetalle> perfilList = new List<PerfilUsuarioOficinaDetalle>();
        //                    perfilList = new PerfilUsuarioOficinaDetalleLogica().obtenerPerfilUsuarioOficinaDetalleXCod(perfil.CodigoPerdilUsuario);

        //                    var NombreOficina = new OficinaLogica().ObtenerOficina(oficina.CodigoOficina).Nombre;
        //                    var NombrePerfil = new PerfilLogistica().ObtenerPerfil(perfil.CodigoPerfil).Nombre;

        //                    Session[Presentacion.Clases.Constante.Sesiones.Nombre] = usuario.Nombre;
        //                    Session[Presentacion.Clases.Constante.Sesiones.Usuario] = usuario.Nombre;
        //                    Session[Presentacion.Clases.Constante.Sesiones.CodigoUsuarioOficina] = oficina.CodigoUsuarioOficina;
        //                    Session[Presentacion.Clases.Constante.Sesiones.CodigoOficina] = oficina.CodigoOficina;
        //                    Session[Presentacion.Clases.Constante.Sesiones.Oficina] = NombreOficina;
        //                    Session[Presentacion.Clases.Constante.Sesiones.CodigoPerfil] = perfil.CodigoPerfil;
        //                    Session[Presentacion.Clases.Constante.Sesiones.Perfil] = NombrePerfil;
        //                    if (perfilList != null)
        //                    {
        //                        Session[Presentacion.Clases.Constante.Sesiones.DetallePerfil] = perfilList;
        //                    }
        //                    resultado.result = 1;
        //                    resultado.message = "Login Correcto";
        //                    RedirectToAction("Index", "Principal");
        //                }
        //                else
        //                {
        //                    resultado.result = 0;
        //                    resultado.message = "*El Usuario no tiene asignado ningun perfil.";
        //                }
        //            }
        //            else
        //            {
        //                resultado.result = 0;
        //                resultado.message = "*El Usuario no tiene Configurado una Oficina.";
        //            }
        //        }
        //        else {
        //            resultado.result = 0;
        //            resultado.message = "*Login Incorecto";
        //        }
        //    }catch (Exception ex) {

        //        resultado.result = 0;
        //        resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
        //    }

        //    return Json(resultado, JsonRequestBehavior.AllowGet);

        //}

        public ActionResult Logout()
        {
            Session.Clear();
            Session.Abandon();
            Response.Redirect("~/Login");
            return View();
        }

        public JsonResult ValidarSesion()
        {
            Resultado resultado = new Resultado();
            if (Session[Presentacion.Clases.Constante.Sesiones.Usuario] == null)
            {
                resultado.result = Constante.MensajeRetorno.LOGOUT;
                resultado.message = Constante.MensajeGenerico.MSG_LOGOUT;
                resultado.isRedirect = true;
                resultado.redirectUrl = Url.Action("Index", "Login");

            }
            else
            {
                resultado.result = Constante.MensajeRetorno.OK;
                resultado.message = string.Empty;
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }


    }
}
